package com.vic.demo;

import org.springframework.expression.Expression;
import org.springframework.expression.spel.standard.SpelExpressionParser;
import org.springframework.expression.spel.support.StandardEvaluationContext;

/**
 * Hello world!
 */
public class Test {


    // 创建了一个spel表达式解析器
    static SpelExpressionParser parser = new SpelExpressionParser();

    public static void main(String[] args) {

        // 通过反射获取属性值
        test2();

        // 解析基础类型、普通类型
//        test1();

    }

    private static void test2() {

        // 定义一个对象
        Holistic holistic = new Holistic();
        // 设置属性
        holistic.setId(1L);


        // 获取 id 的表达式
        Expression expression = parser.parseExpression("id");

        // 创建了一个标准的的评估上下文，并把你的对象丢进去了
        StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext(holistic);

        // 获取对象属性id的值
        Object obj = expression.getValue(standardEvaluationContext);


        System.out.println(obj);

    }

    private static void test1() {
        //字符串
        String str1 = parser.parseExpression("'Hello World!'").getValue(String.class);
        String str2 = parser.parseExpression("\"Hello World!\"").getValue(String.class);

        //int数值类型
        int int1 = parser.parseExpression("1").getValue(Integer.class);
        int hex1 = parser.parseExpression("0xa").getValue(Integer.class);
        //long数值类型
        long long1 = parser.parseExpression("-1L").getValue(long.class);
        long hex2 = parser.parseExpression("0xaL").getValue(long.class);
        //float数字类型
        float float1 = parser.parseExpression("1.1").getValue(Float.class);
        //double数字类型
        double double1 = parser.parseExpression("1.1E+2").getValue(double.class);
        double double2 = parser.parseExpression("1.1E2").getValue(double.class);

        //布尔类型
        boolean true1 = parser.parseExpression("true").getValue(boolean.class);
        boolean false1 = parser.parseExpression("false").getValue(boolean.class);

        //null类型
        Object null1 = parser.parseExpression("null").getValue(Object.class);

    }


}
